package com.tedu.api;


import org.junit.Test;

/**
 * String 字符串类   不可改变类   BUG
 * 假设：10000000个String类---内存
 * 操作系统发现内存如果越来越小 会在硬盘上开辟空间--软件会卡
 * 建议： 存储的字符串类似--String
 *
 *
 *
 * 可变
 * StringBuilder类      创建字符串随时进行改变【修改、增加、插入】
 * String 不可改变的类    频繁创建对象    带来内存损耗
 *
 *
 * StringBuilder 类解决内存损耗
 *
 *
 * 创建方式：StringBuilder  sb=new StringBuilder();
 * C语言                                  好处：创建对象，顺便对象进行销毁
 *            例如：定义变量 int a=malloc（4）；  开辟4个空间
 *                             a=1
 *                             free（a）;  清理内存
 * Java语言                好处：创建完对象，不用管，等GC垃圾回收机制，进行回收
 *                    例如：定义变量，  int a=1;  开辟空间，就交给GC  【使用方便】
 *
 */
public class StringBuilderAPI {


    /**
     * StringBuilder可变的字符串对象类
     * 什么情况下使用：有大量字符串拼接，建议StringBuilder
     * String str="123"    String s="456"     str+s出现新对象
     * <p>
     * <p>
     * append()方法：拼接，等同于String  加号意思
     */


    @Test
    public void testStringBuilderAPI() {
        String str = "你是我的";

        //创建一个空字符串，接受传入字符串【原有字符串上大量拼接】
        StringBuilder sb = new StringBuilder(str);   //不会产生新对象
        sb.append("小苹果");
        System.out.println("原来对象:" + sb);
    }


    /**
     * StringBuilder 可变的字符串
     * replace（开始坐标，结束坐标，替换字符串）  替换          含头不含尾
     * 作用： 可以将字符串中指定范围的内存替换成给定字符串
     */


    @Test
    public void testReplace() {
        StringBuilder sb = new StringBuilder("你就是我的,小可爱~");
        sb = sb.replace(6, 9, "小baby");
        System.out.println("SB替换后：" + sb);


    }


    /**
     * StringBuilder 与StringBuffer---可变字符串类【用法完全一致】
     *
     * append方法、replace方法、insert方法通用
     *
     * insert(插入坐标，给定字符串)方法   返回值String
     *
     * 作用：将给定字符串插入到当前字符串中
     *
     */
    @Test
    public void testInsert(){

        StringBuffer sb=new StringBuffer("你都是我的小可爱");

        sb=sb.insert(0,"从今以后每天");

        System.out.println(""+sb);

    }
}